home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
comm
/
net
/
dnet2_10_13.lha
/
DNet
/
Amiga
/
Sourcen.lha
/
server
/
sprint.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-01-14
|
1KB
|
87 lines
/*
* SPRINT.C
*
* DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
*
* PRINTER SERVER
*
* Accepting one connection at a time, dump the file to PRT:
*
* DNET_WRITE must be 6 or higher for this function to work.
*/
#include "defs.h"
void printfile ARGS((void *));
int
brk()
{
return(0);
}
void
#ifdef LATTICE
_main(str)
#else
_main(len,str)
#endif
char *str;
{
PORT *port;
PROC *myproc = (PROC *)FindTask(NULL);
void *chan;
long mask, rmask;
onbreak(brk);
if (strncmp(str, "__dnet", 6) != 0) {
Version("SPrint", VERSION, SPRINT_VERSION);
_exit(0);
}
port = DListen(PORT_PRINTER);
WaitPort(&myproc->pr_MsgPort);
ReplyMsg(GetMsg(&myproc->pr_MsgPort));
mask = SIGBREAKF_CTRL_C|(1 << port->mp_SigBit);
for (;;) {
rmask = Wait(mask);
if (rmask & SIGBREAKF_CTRL_C)
break;
while (chan = DAccept(port)) {
if (GetEnvVal(DNET_WRITE) >= 6) {
DWrite(chan, "Accepted\n", 9);
printfile(chan);
} else {
DWrite(chan, "Permission Denied\n", 18);
}
DClose(chan);
}
}
DUnListen(port);
}
void
printfile(chan)
void *chan;
{
long n, fh;
char rc = 0;
char buf[256];
if (fh = Open("PRT:", 1006)) {
rc = 1;
while ((n = DRead(chan, buf, 256)) > 0) {
if (Write(fh, buf, n) != n) {
rc = 0;
break;
}
}
Close(fh);
}
DWrite(chan, &rc, 1);
}